package com.tkm.builtinTypes.basic

fun main() {
    //  Kotlin基本数据类型：Int、Long、Boolean。String，注意首字母大写
//    var a: Int = 2
//    val b: String = "Hello Kotlin"
//    val res: Boolean = false

    //  类型推导
    var a = 2
    val b = "Hello Kotlin"
    val res = false

    //  Long类型，结尾增加L，可读性，L需要大写
//    val c = 12345678910l
    val c = 12345678910L

    //  浮点数Float与Double
    //  默认为Double，结尾增加F/f表示Float类型
    val float1 = 1.2f
    val double1 = 1.2
    val double2: Double = 1.2
    //  Kotlin中不允许隐式转换
//    val double3: Double = float1
    val double3: Double = float1.toDouble()

    //  无符号类型UInt/ULong/UByte等
    val g: UInt = 10u
    val h: ULong = 12345678910UL
    val i: UByte = 1u

    println("Range of Int: ${Int.MIN_VALUE}-${Int.MAX_VALUE}")
    println("Range of UInt: ${UInt.MIN_VALUE}-${UInt.MAX_VALUE}")

    val j = "I❤China"
    //  字符串模板
    println("Value of String j is $j")
    println("Length of String j is ${j.length}")
    //  直接使用Java方法
    System.out.printf("Length of String j is %d\n", j.length)

    //  存储在常量区的字符串
    val k = "Today is a sunny day"
    //  存储在堆的字符串
    val m = String(k.toCharArray())
    //  内容比较，相当于Java的equals方法
    println(k == m)
    //  引用比较，相当于Java的==
    println(k === m)

    //  多行字符串（Raw String）
    val n = """
        <!doctype html>
        <html>
            <head>
                <title>Hello Kotlin</title>
            </head>
            <body>
                <h1>Hello World</h1>
                <p>Just a test page</p>
            </body>
        </html>
    """.trimIndent()
    println(n)
}
